module i2s_clk_gen #(
    parameter BIT = 32
)(
    input  wire clk_50m,  // 输入系统时钟 50 MHz
    input  wire rst_n,    // 低有效复位
    output reg  bclk,     // 输出 I2S bit clock 3.072 MHz
    output reg  lrclk     // 输出 I2S word select 48 kHz
);

    // ========================
    // DDS分频产生bclk = 3.072MHz
    // ========================
    // step = 2^32 * (3.072e6 / 50e6) = 263402291
    localparam [31:0] STEP_BCLK = 32'd263402291;

    reg [31:0] phase_acc_bclk;
    always @(posedge clk_50m or negedge rst_n) begin
        if (!rst_n) begin
            phase_acc_bclk <= 0;
            bclk <= 0;
        end else begin
            phase_acc_bclk <= phase_acc_bclk + STEP_BCLK;
            bclk <= phase_acc_bclk[31]; // 取MSB为输出
        end
    end

    // ========================
    // bclk -> lrclk (48kHz)
    // ========================
    // 对于I2S：LRCLK周期 = 64 * BCLK周期
    reg [5:0] lr_cnt;

    always @(negedge bclk or negedge rst_n) begin
        if (!rst_n) begin
            lr_cnt <= 0;
            lrclk <= 0;
        end else begin
            if (lr_cnt == (2*BIT - 1)) begin
                lr_cnt <= 0;
                lrclk <= 0;
            end else begin
                if (lr_cnt == (BIT - 1))
                    lrclk <= 1;
                lr_cnt <= lr_cnt + 1'b1;
            end
        end
    end

endmodule
